home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Grab Bag
/
Shareware Grab Bag.iso
/
007
/
tbbyte.arc
/
PILOT1.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1985-08-14
|
5KB
|
198 lines
{PASCAL VERSION OF WADUZITDO}
PROGRAM WADUZITDO;
CONST PZ=5000; BS=127; EOL=10;STRLEN=80;
TYPE STR=STRING[STRLEN];
VAR LOC,LST,I,E,C : INTEGER;
LCHR,FLG,CBUF,CH,CURS,CBS,CEOL : CHAR;
S : STR;
FLAG, RUN, DONE: BOOLEAN;
PROG : ARRAY[1..PZ] OF CHAR;
PROCEDURE CHIN;
BEGIN
IF FLAG THEN
BEGIN
E := 1;
WRITE (CURS);
READ(S);
FLAG := FALSE
END;
IF E > LENGTH(S) THEN
BEGIN
E := 1;
WRITELN;
WRITE (CURS);
READ (S);
CBUF := CHR(EOL)
END
ELSE
BEGIN
C := ORD(S[E]);
IF C = $1B THEN
BEGIN
DONE := TRUE;
C := $20
END;
CH := CHR(C);
CBUF := CH;
E := E + 1
END;
END;
PROCEDURE CHOUT;
BEGIN
IF CBUF = CHR(EOL) THEN
WRITELN
ELSE
WRITE (CBUF);
END;
PROCEDURE NEWLINE;
BEGIN
WRITELN;
END;
PROCEDURE LIST;
VAR I: INTEGER;
BEGIN
I := 0;
LOC := LOC - 1;
REPEAT
CBUF := PROG [LOC];
LOC := LOC + 1;
I := I + 1;
CHOUT
UNTIL (I>64) OR (CBUF=CEOL);
NEWLINE
END;
PROCEDURE LISTALL;
VAR J : INTEGER;
BEGIN
J := 0;
LOC := 1;
REPEAT
LIST;
J := J + 1
UNTIL (PROG[LOC+1] = 'S') OR (J = 10);
NEWLINE
END;
PROCEDURE EXECUTE;
BEGIN
LOC :=1;
CURS := '#';
REPEAT
CBUF := PROG[LOC];
IF CBUF < '*' THEN
CBUF := '*';
IF NOT (CBUF IN ['*','Y','N','A','M','J','T','S']) THEN
LIST
ELSE
CASE CBUF OF
'*': LOC := LOC+1;
'Y': IF CBUF = FLG THEN
LOC := LOC + 1
ELSE
REPEAT
CBUF := PROG[LOC];
WRITE (CBUF);
LOC := LOC + 1
UNTIL CBUF = CEOL;
'N': IF CBUF = FLG THEN
LOC := LOC + 1
ELSE
REPEAT
CBUF := PROG[LOC];
WRITE (CBUF);
LOC := LOC + 1
UNTIL CBUF = CEOL;
'A' : BEGIN
LST := LOC;
CHIN;
LCHR := CBUF;
NEWLINE;
LOC := LOC + 2
END;
'M' : BEGIN
IF LCHR = PROG[LOC+2] THEN
FLG := 'Y'
ELSE
FLG := 'N';
LOC := LOC + 3
END;
'J' : IF PROG[LOC+2] = '0' THEN
LOC := LST
ELSE
BEGIN
I := ORD(PROG[LOC+2])-48;
REPEAT
LOC := LOC + 1;
IF PROG[LOC] = '*' THEN
I := I - 1;
UNTIL I = 0
END;
'T' : BEGIN
LOC := LOC + 2;
LIST
END;
'S' : BEGIN
DONE := TRUE;
LOC := 1
END
END
UNTIL DONE
END;
begin
CBS := CHR(BS);
CEOL := CHR(EOL);
CBUF := '\';
FLAG := TRUE;
RUN := TRUE;
while RUN do
begin
CURS := '*';
if CBUF = '\' then
LOC := 1
else if CBUF = CBS then
LOC := LOC - 1
else if CBUF = '/' then
LIST
else if CBUF = '=' then
LISTALL
else if CBUF = '$' then
BEGIN
DONE := FALSE;
EXECUTE
END
else if CBUF = '!' then
RUN := FALSE
else if CBUF = '%' then
begin
I := 0;
while (I<64) and (PROG[LOC] <> CEOL) do
begin
PROG[LOC] := CHR(0);
LOC := LOC + 1
end;
PROG[LOC] := CEOL;
LOC := LOC + 1
end
else begin
PROG[LOC] := CBUF;
LOC := LOC + 1
end;
if RUN then
begin
CURS := '*';
CHIN
end
END
END.